package com.study.kt._01grammar._01basic

fun main() {
    //testFor()
    //testLabelReturn()
    //println(testIf(10, 2))
    //testWhen()
    //testWhen2(12)
    testWhen3()
}

//when表达式有返回值
fun testWhen3(): String {
    var name = "fauks"
    return when (name) {
        "fauks" -> "是fauks"
        else -> "不知道是谁"
    }
}

//when可以不带参数，直接判断条件
fun testWhen2(age: Int) {
    when {
        age == 2 -> println("2岁")
        age > 10 -> println("大于10岁")
    }
}

//when 表达式 类似switch，支持任意类型以及条件
fun testWhen(): String {
    val name = "fauks"
    when (name) {
        is String -> "是String" //支持类型判断
        "jay", "chou" -> return "周杰伦" //两个条件相同，可以放在一起处理
        in "a".."z" -> return "不知道" //支持区间
        "fauks" -> return "是fauks" //如果语句仅有一行可以省略 {}
        "bob" -> return "是bob"
        else -> {
            return "没有name"
        }
    }
    return ""
}

//if语句  求两者的最大值
fun testIf(num1: Int, num2: Int): Int {
    //标准写法
    /* if (num1 > num2) {
         return num1
     } else {
         return num2
     }*/

    //如果if语句 {}中代码只有一行可以省略 {}
    //if (num1 > num2) return num1 else return num2

    //简化写法 kotlin中if不仅仅是运算法还是表达式，并且有返回值，返回值为{}中最后一行，可以省略 return
    return if (num1 > num2) num1 else num2

    //该if返回 一个字符串
    if (true) {
        //do something
        "abc"
    }
}

//标签处返回
fun testLabelReturn() {
    val str1 = "123"
    val str2 = "abc"
    //要求循环 str1 str2 俩俩字符组合，遇到2b跳出
    //错误的做法
    for (i in str1) {
        for (c in str2) {
            if (i == '2' && c == 'c') {
                //break只能跳出当前循环，跳不出外层循环，所以除了2b外都打印
                break
            }
            println("$i $c")
        }
    }

    println("使用标签返回")

    loop@ for (i in str1) {
        for (c in str2) {
            if (i == '2' && c == 'c') {
                //break到loop处
                break@loop
            }
            println("$i $c")
        }
    }
}

//for循环
fun testFor() {
    //for循环 带下标
    val s = "hellofauks"
    for ((index, c) in s.withIndex()) {
        print("$index == $c;")
    }
    println("foreach 循环")
    //foreach it表示每个元素
    s.forEach { print(it) }
    println("带下标的foreach")
    s.forEachIndexed { index, c -> print("$index == $c") }
}
